package com.tn.service.camera;

import com.tn.controller.alarm.common.model.PageInput;
import com.tn.controller.alarm.common.model.PageResult;
import com.tn.controller.alarm.common.model.camera.entity.PositionAreaDO;
import com.tn.controller.alarm.common.model.camera.vo.AreaVideoVO;
import com.tn.controller.alarm.common.model.camera.vo.CameraVO;
import com.tn.controller.alarm.common.model.camera.vo.TimeOfTruckVO;
import com.tn.controller.alarm.common.model.camera.vo.TruckTrialCameraVO;
import com.tn.exception.DatabaseOperationFailedException;

import java.util.List;
import java.util.Map;

/**
 * 摄像头监控service
 *
 * @program: tn_aucy_java
 * @author: yangjiayao
 * @create: 2022/1/7
 */
public interface ICameraService {
    /**
     * 查询厂区区域
     *
     * @return 区域列表
     */
    List<PositionAreaDO> queryArea();

    /**
     * 添加摄像头
     *
     * @param camera 摄像头信息
     * @throws DatabaseOperationFailedException 数据库异常
     */
    void addCamera(CameraVO camera) throws DatabaseOperationFailedException;

    /**
     * 删除摄像头
     *
     * @param camera 摄像头信息
     * @throws DatabaseOperationFailedException 数据库异常
     */
    void deleteCamera(CameraVO camera) throws DatabaseOperationFailedException;

    /**
     * 修改摄像头信息
     *
     * @param camera 摄像头信息
     * @throws DatabaseOperationFailedException 数据库异常
     */
    void modifyCamera(CameraVO camera) throws DatabaseOperationFailedException;

    /**
     * 查询摄像头信息
     *
     * @param cameraPage 分页查询条件
     * @return 摄像头信息
     */
    PageResult<CameraVO> queryCamera(PageInput<CameraVO> cameraPage);

    /**
     * 查询摄像头列表
     *
     * @return 摄像头列表
     */
    List<CameraVO> queryCameraList();

    /**
     * 查询视频列表
     *
     * @return 列表
     */
    List<AreaVideoVO> queryVideoList();

    /**
     * 查询货车列表
     *
     * @param page 分页参数
     * @return 结果
     */
    PageResult<String> queryTruck(PageInput<Object> page);

    /**
     * 查询车辆入场时间列表
     *
     * @param page 分页查询条件
     * @return 结果
     */
    PageResult<TimeOfTruckVO> queryTimeOfTruck(PageInput<Map<String, String>> page);

    /**
     * 查询车辆经过的视频列表
     *
     * @param page 分页查询条件
     * @return 结果
     */
    PageResult<TruckTrialCameraVO> queryTruckTrialCamera(PageInput<TimeOfTruckVO> page);

    void addArea(PositionAreaDO positionArea);

    void editArea(PositionAreaDO positionArea);

    void deleteArea(Integer id);
}
